﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Libreria.RFID.Modelo;

namespace Libreria.RFID.Negocio
{
    public class RegistroDeObjetoNegocio
    {
        public List<RegistroDeObjeto> consultarRegistrosDeObjeto(string cadenaDeConexion)
        {
            RegistroDeObjeto regisobjeto = new RegistroDeObjeto(cadenaDeConexion);
            return regisobjeto.consultar();
        }

        public List<RegistroDeObjeto> consultarObjetosPorCodigo(Int32 codigo, String CadenaDeConexion)
        {
            RegistroDeObjeto objetos = new RegistroDeObjeto(CadenaDeConexion);
            List<RegistroDeObjeto> objs = new List<RegistroDeObjeto>();
            if (codigo > 0)
            {
                objetos.Identificador = null;
                objetos.Codigoobjeto = codigo;
                objetos.Codigopersona = null;
                objetos.Fechaentrada = DateTime.MinValue;
                objetos.Fechasalida = DateTime.MinValue;
                objetos.Ultimo = true;
                objs = objetos.consultar();
            }
            return objs;
        }

        public List<RegistroDeObjeto> consultarObjetosPorDescripcion(String descripcion, String CadenaDeConexion)
        {
            List<RegistroDeObjeto> objs = new List<RegistroDeObjeto>();

            if (descripcion != null)
            {
                List<Objeto> objF = new List<Objeto>();
                Objeto obj = new Objeto(CadenaDeConexion);
                obj.Codigo = null;
                obj.Descripcion = descripcion;
                obj.Inventario = null;
                obj.Prestamo = null;
                objF = obj.consultar();

                if (objF.Count > 0)
                {
                    RegistroDeObjeto objetos = new RegistroDeObjeto(CadenaDeConexion);
                    objetos.Identificador = null;
                    objetos.Codigoobjeto = objF[0].Codigo;
                    objetos.Codigopersona = null;
                    objetos.Fechaentrada = DateTime.MinValue;
                    objetos.Fechasalida = DateTime.MinValue;
                    objetos.Ultimo = true;
                    objs = objetos.consultar();
                }
            }
            return objs;
        }


        public void crearRegistroDeObjeto(Int32 identificador, Int32 codigoobjeto, Int32 codigopersona, DateTime fechaentrada, DateTime fechasalida, string cadenaDeConexion)
        {

            RegistroDeObjeto registroACrear = new RegistroDeObjeto(cadenaDeConexion);
            RegistroDeObjeto registroTemp = new RegistroDeObjeto();
            registroACrear.Codigoobjeto = codigoobjeto;
            registroACrear.Ultimo = true;
            List<RegistroDeObjeto> lista = registroACrear.consultar();

            foreach (RegistroDeObjeto item in lista)
            {
                registroTemp = item;
            }

            if ((registroTemp.Fechasalida == DateTime.MinValue && registroTemp.Fechaentrada == DateTime.MinValue) || registroTemp.Fechasalida > DateTime.MinValue)
            {
                registroACrear.Identificador = null;
                registroACrear.Codigopersona = codigopersona;
                registroACrear.Fechaentrada = DateTime.MinValue;
                registroACrear.Fechasalida = DateTime.MinValue;
                registroACrear.Ultimo = false;
                registroACrear.actualizarSinLLavePrimaria();

                registroACrear.Fechaentrada = DateTime.Now;
                registroACrear.Ultimo = true;

                registroACrear.crear();
                throw new Exception("Entrada del objeto exitosa", new Exception("Success"));
            }
            else
            {
                if (registroTemp.Codigopersona == codigopersona)
                {
                    if (registroTemp.Fechaentrada > DateTime.MinValue && registroTemp.Fechasalida == DateTime.MinValue)
                    {
                        registroACrear.Identificador = registroTemp.Identificador;
                        registroACrear.Codigopersona = codigopersona;
                        registroACrear.Codigoobjeto = codigoobjeto;
                        registroACrear.Fechasalida = DateTime.Now;
                        registroACrear.Ultimo = false;
                        registroACrear.actualizar();
                        throw new Exception("Salida del objeto exitosa", new Exception("Success"));
                    }
                }
                else
                {
                    throw new Exception("El objeto no fue ingresado por la persona que intenta salir", new Exception("Error"));
                }
            }
        }
    }
}
